Use case: DMA2D transfer polling mode ¶
Sequence diagram ¶
Code snippet ¶
|
HAL1 |
HAL2 |
|---|---|
const uint32_t ARGB8888_Tab[256] = { .
.
.
0xEFFFFFF2, 0xAB1FFFF0,
0x0504044E, 0x89ADCDEF,
0x15248722, 0x5201245E,
0x01025FDE, 0xFE010203,
0xEFFFFFF2, 0xAB1FFFF0,
0x0504044E, 0x89ADCDEF,
0x15248722, 0x5201245E,
0x01025FDE, 0xFE010203};
uint32_t ARGB8888_result[1024];
DMA2D_HandleTypeDef hdma2d;
/* DMA2D init configuration */
hdma2d.Instance = DMA2D;
hdma2d.Init.Mode = DMA2D_M2M;
hdma2d.Init.ColorMode = DMA2D_OUTPUT_ARGB8888;
hdma2d.Init.RedBlueSwap = DMA2D_RB_REGULAR;
hdma2d.Init.OutputOffset = 0x0;
hdma2d.Init.LineOffsetMode = DMA2D_LOM_BYTES;
hdma2d.Init.AlphaInverted = DMA2D_INVERTED_ALPHA;
hdma2d.Init.BytesSwap = DMA2D_BYTES_SWAP;
/* DMA2D layer configuration */
hdma2d.LayerCfg[DMA2D_FOREGROUND_LAYER].InputColorMode = DMA2D_INPUT_ARGB8888;
hdma2d.LayerCfg[DMA2D_FOREGROUND_LAYER].RedBlueSwap = DMA2D_RB_REGULAR;
hdma2d.LayerCfg[DMA2D_FOREGROUND_LAYER].InputOffset = 0;
hdma2d.LayerCfg[DMA2D_FOREGROUND_LAYER].AlphaMode = DMA2D_REPLACE_ALPHA;
hdma2d.LayerCfg[DMA2D_FOREGROUND_LAYER].InputAlpha = 0xFF;
hdma2d.LayerCfg[DMA2D_FOREGROUND_LAYER].AlphaInverted = DMA2D_INVERTED_ALPHA;
HAL_DMA2D_Init(&hdma2d);
HAL_DMA2D_ConfigLayer(&hdma2d, DMA2D_FOREGROUND_LAYER);
HAL_DMA2D_Start(&hdma2d, (uint32_t)&ARGB8888_Tab,
(uint32_t)&ARGB8888_result, 16, 16);
HAL_DMA2D_PollForTransfer(&hdma2d, 10);
|
const uint32_t ARGB8888_Tab[256] = { .
.
.
0xEFFFFFF2, 0xAB1FFFF0,
0x0504044E, 0x89ADCDEF,
0x15248722, 0x5201245E,
0x01025FDE, 0xFE010203,
0xEFFFFFF2, 0xAB1FFFF0,
0x0504044E, 0x89ADCDEF,
0x15248722, 0x5201245E,
0x01025FDE, 0xFE010203};
uint32_t ARGB8888_result[1024];
hal_dma2d_handle_t hdma2d;
/* DMA2D initialization */
HAL_DMA2D_Init(&hdma2d, HAL_DMA2D);
/* DMA2D output configuration */
p_config.output.p_dest = (void *)&ARGB8888_result;
p_config.output.color_mode = HAL_DMA2D_OUTPUT_COLOR_ARGB8888;
p_config.output.offset = 0x0;
/* DMA2D input configuration */
p_config.input.p_src = (void const*) (uint32_t)&ARGB8888_Tab;
p_config.input.color_mode = HAL_DMA2D_INPUT_COLOR_ARGB8888;
p_config.input.offset = 0;
p_config.input.alpha_mode = HAL_DMA2D_INPUT_ALPHA_REPLACE;
p_config.input.alpha_value = 0xFF;
p_config.width = 16;
p_config.height = 16;
HAL_DMA2D_EnableOutputAlphaInversion(&hdma2d);
HAL_DMA2D_EnableOutputByteSwap(&hdma2d);
HAL_DMA2D_EnableInputAlphaInversion(&hdma2d);
HAL_DMA2D_SetConfigMemCopy(&hdma2d, &p_config);
HAL_DMA2D_Start(&hdma2d);
HAL_DMA2D_PollForTransfer(&hdma2d, 10);
|
Key changes ¶
In HAL2, the source, destination, and size are configured using a dedicated configuration function (for example,
HAL_DMA2D_SetConfigMemCopy()) before callingHAL_DMA2D_Start().HAL2 introduces unitary APIs to enable specific features (for example, alpha inversion and byte swap).

